package linestrategy

import (
	"codejy/analysis/lineanalysis"
	"codejy/store"
	"codejy/structdef"
	"strings"
)

// 定义调用其他文件的方法
type CrossFileDefineMethodStrategy struct {
}

// 注册策略
func init() {
	RegisterStrategy(&CrossFileDefineMethodStrategy{})
}

// 判断是否是函数调用
func (f *CrossFileDefineMethodStrategy) getId() int {
	return lineanalysis.CrossFileDefineMethod
}

func (f *CrossFileDefineMethodStrategy) Execute(threadStore *structdef.ThreadStore) {
	codeLine := threadStore.Code.LineContent
	//获取第一个点位置
	index := strings.Index(codeLine, ".")
	//截取第一个.之前的字符串,即文件名或者别名
	fileName := codeLine[:index]
	//截取第一个.之后的字符串,即函数调用
	funExpression := codeLine[index+1:]
	store.RealityFilePathSwitch(threadStore, fileName, func() string {
		funName, funParams := SubFunctionCallNameAndParam(funExpression)
		FunctionCallExecute(threadStore, funName, funParams)
		return ""
	})

}
